/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import model.gestion_jeu.Partie;
import model.jeu_de_dame.Piece;
import vue.DamierView;

/**
 * <b>PartieController est une classe implémentant AbstractController
 * </b>
 * @see AbstractController
 * @see DamierView
 * @author nabil mansouri
 * @version 2.0
 */
public class PartieController extends AbstractController{
    /**
     * Contruscteur de PartieController
     * @param vue 
     *      la vue de notre application
     */
    
    Piece selectionnee;
    public PartieController(Vue vue)
    {
        super(vue);
    }
     /**
     *Prends en paramètre le nom des deux joueurs et cree une nouvelle partie si les noms sont corrects (au moins 3 caractères).
     * @param nom1
     *          nom du joueur blanc
     * @param nom2 
         *      nom du joueur en noir
     */
    public void creerPartie(String nom1, String nom2)
        {
            String erreur = "Le nom doit comporter au moins 3 caractères";
            if(nom1.trim().length()<3)
            {
                vue.setPanelDemarrage(nom1, nom2,erreur , "");
            }
            else if(nom2.trim().length()<3)
            {
                vue.setPanelDemarrage(nom1, nom2,"" , erreur);
            }
            else if(nom1.trim().equalsIgnoreCase(nom2.trim()))
            {
                erreur = "Les deux pseudos sont identiques";
                vue.setPanelDemarrage(nom1, nom2,erreur , erreur);
            }
            else
            {
                model = new Partie(nom1,nom2);
                model.initialisation();
                vue.creerPartie(nom1, nom2, model);
                vue.displayTour();
            }
        }
             /**
     * Initialise le damier de la partie. Et repositionne les pions à l'états initial.
     */
	public void initialisation()
        {
            model.initialisation();
            vue.displayTour();
        }
        
   /**
     *Prends en paramètre le nom des deux joueurs, elle recrée une partie et réinitialise le damier. La vue est ajouté en tant qu'Observer du model.
     * @param nom1
     *          nom du joueur blanc
     * @param nom2 
         *      nom du joueur en noir
     */
        public void initialisation(String joueur1, String joueur2)
        {
            model = new Partie(joueur1,joueur2);
            model.initialisation();
            vue.displayTour();
        }
        
        /**
     *Prends en paramètre les coordonnées de la case séléctionné et réalise le déplacement d'une piece si autorisé.
     * @param x
     *          coordonnée en abscisse
     * @param y 
         *      coordonnée en ordonnée
         * @see model.Joueur#selectionCase(int, int) 
     */
        public void selectionCase(int x, int y)
        {
            if(this.selectionnee!=null)
                if(model.selectionCase(x, y,this.selectionnee))
                    vue.displayTour();
            this.selectionnee = null;
        }
        
                 /**
     *Prends en paramètre les coordonnées de la piece séléctionné et réalise la séléction si elle est autorisée.
     * Cette methode est abstraite.
     * @param x
     *          coordonnée en abscisse
     * @param y 
         *      coordonnée en ordonnée
         * @see model.Joueur#selectionPion(int, int) 
     */
        public void selectionPion(int x, int y)
        {
            Piece p =model.selectionPion(x, y);
            this.selectionnee = p;            
        }
        
        public void finPartie()
        {  
            vue.setPanelDemarrage("", "", "", "");
        }
}
